package com.miku.blog.utils;

import com.miku.blog.domain.Comment;
import com.miku.blog.domain.UniqueView;
import com.miku.blog.domain.dto.ArticleRankDTO;

import java.util.List;
import java.util.Objects;

/**
 * @author shkstart
 * @create ${}YEAR-05-27 1:09
 */
public class InsertSortUtils {


    /**
     * 根据文章阅读量 从高到底 对List集合进行排序
     *
     * @param articleRankDTOS 文章数据列表
     */
    public static void insertSortByArticleViewCount(List<ArticleRankDTO> articleRankDTOS) {
        if (Objects.isNull(articleRankDTOS) || articleRankDTOS.size() <= 1) {
            return;
        }

        for (int i = 1; i < articleRankDTOS.size(); i++) {
            ArticleRankDTO article = articleRankDTOS.get(i);
            int j = i;
            while (j > 0 && article.getViewsCount() > articleRankDTOS.get(j - 1).getViewsCount()) {
                articleRankDTOS.set(j, articleRankDTOS.get(j - 1));
                j--;
            }
            if (j != i) {
                articleRankDTOS.set(j, article);
            }
        }

    }


    /**
     * 根据 访问日期 从小到大 进行排序
     * <p>
     * (日期 越接近 当前日期 则越大)
     *
     * @param uniqueViews
     */
    public static void insertSortByUniqueViewCreateTime(List<UniqueView> uniqueViews) {
        if (Objects.isNull(uniqueViews) || uniqueViews.size() <= 1) {
            return;
        }

        for (int i = 1; i < uniqueViews.size(); i++) {
            UniqueView uniqueView = uniqueViews.get(i);
            int j = i;

            while (j > 0 && uniqueView.getCreateTime().before(uniqueViews.get(j - 1).getCreateTime())) {
                uniqueViews.set(j, uniqueViews.get(j - 1));
                j--;
            }

            if (j != i) {
                uniqueViews.set(j, uniqueView);
            }

        }

    }


    /**
     * 根据 评论日期 从小到大 进行排序
     * <p>
     * (日期 越接近 当前日期 则越大)
     *
     * @param commentList
     */
    public static void insertSortByCommentCreateTimeUp(List<Comment> commentList) {
        if (Objects.isNull(commentList)) {
            return;
        }

        for (int i = 1; i < commentList.size(); i++) {
            Comment commentIndex = commentList.get(i);
            int j = i;
            while (j > 0 && commentIndex.getCreateTime().before(commentList.get(j - 1).getCreateTime())) {
                commentList.set(j, commentList.get(j - 1));
                j--;
            }
            if (j != i){
                commentList.set(j,commentIndex);
            }
        }


    }




    /**
     * 根据 评论日期 从大到小 进行排序
     * <p>
     * (日期 越接近 当前日期 则越大)
     *
     * @param commentList
     */
    public static void insertSortByCommentCreateTimeDown(List<Comment> commentList) {
        if (Objects.isNull(commentList)) {
            return;
        }

        for (int i = 1; i < commentList.size(); i++) {
            Comment commentIndex = commentList.get(i);
            int j = i;
            while (j > 0 && commentIndex.getCreateTime().after(commentList.get(j - 1).getCreateTime())) {
                commentList.set(j, commentList.get(j - 1));
                j--;
            }
            if (j != i){
                commentList.set(j,commentIndex);
            }
        }


    }


}
